package loaders
{
    import flash.events.*;
    import flash.net.*;
    import flash.utils.*;

    /**
     * 底图块加载，如果要渐进加载则使用URLStream。 
     * @author Ryan
     * 
     */	
    internal class TileLoader 
    {
        private var _urlLoader:URLLoader;
        private var _server:*;
        private var _obj : Object;
		private var _sendFunc:Function;
        
        public var url:String;

        public function TileLoader(conn:*)
        {
            this._server = conn;
            _urlLoader = new URLLoader();
            _urlLoader.dataFormat = URLLoaderDataFormat.BINARY;
            _urlLoader.addEventListener(Event.COMPLETE, completeHandler);
            _urlLoader.addEventListener(IOErrorEvent.IO_ERROR, errorHandler);
			
//			if( conn is MapServer ){
//				_sendFunc = _server.sendMessage;
//			} else {
				_sendFunc = _server.receiveMessage;
//			}
        } 

        public function completeHandler(event:Event) : void
        {
            // 如果小于40000一次发送，否则分2次。
            _obj.data = _urlLoader.data;
			_sendFunc(_obj);
            loadNext();
        } 
        
        public function load( obj :Object ) : void
		{
            url = obj.url;
            if( url ){
            	_obj = obj;
            	_urlLoader.load(new URLRequest(url));
            }
        } 

        public function loadNext() : void
        {
			url = null;
            _urlLoader.close();
            if ( _server.urlList.length > 0) {
            	_obj = _server.urlList.shift();
            	//trace( "Loaing url : ",_obj.url );
            	load( _obj );
            }
        } 

        public function errorHandler(event:IOErrorEvent) : void
        {
            //_server.sendStatus("IOErrorURL=" + url);
            // IOError 会导致URLLoader使用时间变长，加载变慢，需要尽量避免。
            //trace("IOErrorURL=" + url);
            url = null;
            loadNext();
        } 

    }
}
